窗口结束后资源释放不掉问题解决办法 |
您所在的位置:网站首页 › wpf python窗体 › 窗口结束后资源释放不掉问题解决办法 |
.net类库已经帮助我们实现了窗口的关闭,如果此窗口是系统的主窗口,关闭此窗口即应该退出了整个应用程序。但事实上有时候并不是这样的,关闭窗口,只是停止了当前窗口的消息循环。系统主窗口,实质上是Main函数中开始消息循环的窗口,这个消息循环结束后,Main函数就基本上完成了历史使命,整个应用程序自然就结束了。Application.Exit()方法是终止所有线程上的消息循环,一般情况下,无论在什么地方调用此方法,程序就能退出。但是如果你在程序中加入了某些耗时甚至是死循环的线程,那么即使是消息循环终止,程序也依然不会结束。比较温和比较合适的做法是结束消息循环之前,终止所有自己新建的线程。有时候我们连自己也搞不清楚到底是那些顽固的线程在执行,就需要用点暴力的手段了。.net为我们提供了Environment.Exit(0)方法,调用此方法,应用程序即强制退出。 当你打开一个子窗体,进行某项操作时,如果字窗体中有循环操作时。如果运行中我关闭子窗体,发现窗体虽然关闭了,但子窗体中的循环程序却没有退出,一直在 执行,并占用着系统资源,直到循环结束,才真正的释放资源。尽管你在字窗体的Closed事件中写了如下代码: private void frmFileDisposal_Closed(object sender, System.EventArgs e) { this.Dispose(); this.Close(); } 从查MSDN和从网上查资料可以知道,Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,要想强制突出当前程序要用:System.Environment.Exit(int exitcode)方法;该方法:终止当前进程并为基础操作系统提供指定的退出代码。如下则问题解决: private void frmFileDisposal_Closed(object sender, System.EventArgs e) { System.Environment.Exit(System.Environment.ExitCode); this.Dispose(); this.Close(); }或者把它放到事件里: while (MessageBox.Show("退出当前窗体?", "", MessageBoxButtons.YesNo) == DialogResult.No) { for(int j=1; j |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |